Storage systems often use cache memory of a storage controller to implement various caching techniques for enhanced read/write performance. For instance, in write back caching, a storage controller temporarily stores write commands in faster performing cache memory and reports the command as complete to the host though it is not actually performed/completed in slower primary storage until a later, more convenient time. While this technique increases input/output (I/O) throughput, data integrity may be compromised if a storage controller with cached write commands fails and is no longer accessible.
High availability storage systems implement redundant components to reduce the impact of a single component within the storage system failing. In such systems, a redundant storage controller may receive cache coherency information from a primary storage controller to ensure data integrity of the storage system in the event that the primary storage controller fails. Cache coherency exchanges between storage controllers in current high availability configurations, such as Storage Area Network (SAN) systems, rely on dedicated channels between the storage controllers or the switched fabric that connects the storage controllers to the common storage unit (e.g., a Redundant Array of Independent Disks (RAID) volume). Unfortunately, these configurations are expensive to implement and the repeated exchange of cache coherency between storage controllers undesirably consumes processing and bandwidth resources of the storage system.